home *** CD-ROM | disk | FTP | other *** search
- page 100, 132
- title ESR_setupInfo
- ;
- ; int ESR_setupInfo(char *out_buf);
- ;
- ; 機能
- ; FMR-BIOS拡張サービスルーチン(Int 8EH)
- ; システム情報の取得(Function 00H)を呼び出す
- ;
- ; パラメタ
- ; out_buf : システム情報通知領域(200バイト)へのポインタ
- ;
- ; 復帰値
- ; 0 : 正常終了
- ;
- ; アセンブル時には大文字/小文字識別オプション -twocase を指定すること
- ; 例 386asm setup -twocase
- ;
- ; リンク時にはオプション -callbufs を指定すること
- ; 例 386link setup -callbufs 2
- ;
- ; 参考文献
- ; FM-TOWNSテクニカルデータブック pp.287~pp.289
- ;
- .386p
- pmdata segment dword public use32 'DATA'
- pmdata ends
- pmcode segment byte public use32 'CODE'
- pmcode ends
-
- public ESR_setupInfo
-
- assume ds:pmdata
- pmdata segment
- rmseg dd ? ; 共有バッファのリアルモード用セグメント
- rmoff dd ? ; 共有バッファのリアルモード用オフセット
- pmseg dd ? ; 共有バッファのネイティブモード用セグメント
- pmoff dd ? ; 共有バッファのネイティブモード用オフセット
- pmdata ends
-
- assume cs:pmcode
- pmcode segment
- db 'ESR_setupInfo',13
- ESR_setupInfo proc near
-
- FUNCTION equ 00h ; Function 00H : システム情報の取得
- INT_NO equ 8eh ; 拡張サービスルーチン
- datasize equ 200 ; 転送するデータのバイト数
-
- #out_buf equ SS:[ebp+8] ; C言語I/F第1パラメタアドレス
-
- enter 0, 0
- cld
- push ds
- push es
- push esi
- push edi
- push ebx
- push ecx
- call mak_buffs ; 共有バッファを確保
- mov ah, FUNCTION
- ; mov al, 入力パラメタ ; ALへの設定情報は無し
- mov di, word ptr rmoff ; DS:DIで通知領域を指定
- push dword ptr rmseg ; ES
- push dword ptr rmseg ; DS
- push dword ptr INT_NO
- call BIOS_call
- add esp, 12
- mov ecx, datasize ; 共有バッファのバイト数をセット
- push ds
- pop es
- mov edi, #out_buf ; 転送先をセット
- mov esi, dword ptr pmoff ; 転送元をセット
- mov ds, word ptr pmseg
- rep movsb ; データを転送
- movzx eax, ah ; BIOSコールの復帰値をAXへセット
- pop ecx
- pop ebx
- pop edi
- pop esi
- pop es
- pop ds
- leave
- ret
- ESR_setupInfo endp
-
- mak_buffs proc near
- mov ax, 250dh
- int 21h
- mov word ptr rmoff, bx
- shr ebx, 16
- mov dword ptr rmseg, ebx
- mov dword ptr pmoff, edx
- mov ax, es
- mov word ptr pmseg, ax
- ret
- mak_buffs endp
-
- RMINT struc
- RMI_INUM dw ?
- RMI_DS dw ?
- RMI_ES dw ?
- RMI_FS dw ?
- RMI_GS dw ?
- RMI_EAX dd ?
- RMI_EDX dd ?
- RMINT ends
-
- BIOS_call proc near
- #INTNO equ (word ptr 8[ebp])
- #RMDS equ (word ptr 12[ebp])
- #RMES equ (word ptr 16[ebp])
- #RMI equ (dword ptr [ebp - (size RMINT)])
- enter 0, 0
- sub esp, size RMINT
- mov #RMI.RMI_EAX, eax
- mov #RMI.RMI_EDX, edx
- mov ax, #RMDS
- mov #RMI.RMI_DS, ax
- mov ax, #RMES
- mov #RMI.RMI_ES, ax
- mov ax, #INTNO
- mov #RMI.RMI_INUM, ax
- push ds
- mov ax, ss
- mov ds, ax
- lea edx, #RMI
- mov ax, 2511h
- int 21h
- pop ds
- add esp, size RMINT
- pop ebp
- ret
- BIOS_call endp
- pmcode ends
- end